www.gusucode.com > VC++ 编写软件自动升级服务源代码 > VC++ 编写软件自动升级服务源代码/gusucode/updater_src0.8.1.6/ProxyInfo.cpp

    /********************************************************************
	created:	2005/04/25
	created:	25:4:2005   15:07
	filename: 	Proxy.cpp
	file path:	Updater
	file base:	ProxyInfo
	file ext:	cpp
	author:		Geert van Horrik
	
	purpose:	
*********************************************************************/

//*********************************************************************
// INCLUDES
//*********************************************************************

#include "stdafx.h"
#include "Updater.h"
#include "ProxyInfo.h"
#include <afxinet.h>
#include "ProxyWPAD.h"

//*********************************************************************
// CONSTRUCTOR & DESTRUCTOR
//*********************************************************************

//*********************************************************************
// PUBLIC FUNCTIONS
//*********************************************************************

bool CProxyInfo::GetProxyInfo(CString sURL, ProxyData * pProxyInfo)
{
	// Declare variables
	INTERNET_PER_CONN_OPTION_LIST List;
	INTERNET_PER_CONN_OPTION Option[5];
	unsigned long nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
	CString sLog;
	CFunctions * pFunctions = CFunctions::Instance();
	CSettings * pSettings = CSettings::Instance();
	CLog * pLog = CLog::Instance();

	// Set default values for pProxyInfo
	pProxyInfo->dwAccessType = INTERNET_OPEN_TYPE_PRECONFIG;
	//pProxyInfo->sProxyName = NULL;
	//pProxyInfo->sProxyBypass = NULL;
	
	// Initialize options
	Option[0].dwOption = INTERNET_PER_CONN_AUTOCONFIG_URL;
	Option[1].dwOption = INTERNET_PER_CONN_AUTODISCOVERY_FLAGS;
	Option[2].dwOption = INTERNET_PER_CONN_FLAGS;
	Option[3].dwOption = INTERNET_PER_CONN_PROXY_BYPASS;
	Option[4].dwOption = INTERNET_PER_CONN_PROXY_SERVER;

	// Initialize list
	List.dwSize = nSize;
	List.pszConnection = NULL;
	List.dwOptionCount = 5;
	List.dwOptionError = 0;
	List.pOptions = Option;

	// Get proxy information
	if (InternetQueryOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, &nSize))
	{
		// Do we have a valid auto config URL?
		if (Option[0].Value.pszValue != NULL)
		{
			// Get special WPAD proxy info
			CProxyWPAD::GetWPADProxyInfo(sURL, Option[0].Value.pszValue, pProxyInfo);
		}
		else
		{
			// Set proxy info
			pProxyInfo->dwAccessType = Option[2].Value.dwValue;
			pProxyInfo->sProxyName = Option[4].Value.pszValue;
			pProxyInfo->sProxyBypass = Option[3].Value.pszValue;
		}

		// Make sure to pick the fastest connection (direct)
		//pProxyInfo->dwAccessType |= PROXY_TYPE_AUTO_DETECT;
	}

	// Free objects
	if (Option[0].Value.pszValue != NULL)
		GlobalFree(Option[0].Value.pszValue);
	if (Option[3].Value.pszValue != NULL)
		GlobalFree(Option[3].Value.pszValue);
	if (Option[4].Value.pszValue != NULL)
		GlobalFree(Option[4].Value.pszValue);

	// Return value is not used (yet)
	return true;
}

//*********************************************************************
// PRIVATE FUNCTIONS
//*********************************************************************